﻿namespace IconPatcher
{
    using System.Globalization;

    public class DllInformation
    {
        public DllInformation(bool supportsCulture, string path, int imageId)
        {
            SupportsCulture = supportsCulture;
            Path = path;
            UseId = true;
            ImageId = imageId;
        }

        public DllInformation(bool supportsCulture, string path, string imageName)
        {
            SupportsCulture = supportsCulture;
            Path = path;
            ImageName = imageName;
        }

        #region Testing

        //internal DllInformation(string path, ImageId imageId)
        //{
        //    Path = path;
        //    UseId = imageId.IsInteger;
        //
        //    if (imageId.IsInteger)
        //    {
        //        ImageId = imageId.ToInteger();
        //    }
        //    else
        //    {
        //        ImageName = imageId.ToString();
        //    }
        //}

        //internal DllInformation(string path, params ImageId[] imageIds)
        //{
        //    ImageIds = new List<ImageId>(imageIds);
        //}

        //private List<ImageId> ImageIds { get; set; }

        #endregion

        public int ImageId { get; private set; }

        public string ImageName { get; private set; }

        public string Path { get; private set; }

        public bool SupportsCulture { get; private set; }

        public bool UseId { get; private set; }

        public string ImageIdString
        {
            get
            {
                if (UseId)
                {
                    return ImageId.ToString(CultureInfo.InvariantCulture);
                }

                return ImageName;
            }
        }

        public string ImageResourceIdString
        {
            get
            {
                if(UseId)
                {
                    return "#" + ImageId;
                }

                return ImageName;
            }
        }

        public string ExpandedPath(string language)
        {
            return Path.HanselFormat(new { language });
        }
    }

    #region Testing

    //public struct ImageId
    //{
    //    private ImageId(int id)
    //        : this()
    //    {
    //        Id = id;
    //    }
    //
    //    private ImageId(string name)
    //        : this()
    //    {
    //        Name = name;
    //    }
    //
    //    public bool IsInteger { get; private set; }
    //    private int Id { get; set; }
    //    private string Name { get; set; }
    //
    //    public static implicit operator ImageId(int id)
    //    {
    //        return new ImageId(id);
    //    }
    //
    //    public static implicit operator ImageId(string name)
    //    {
    //        return new ImageId(name);
    //    }
    //
    //    public int ToInteger()
    //    {
    //        if (IsInteger)
    //        {
    //            return Id;
    //        }
    //
    //        throw new ArgumentException("Value is not an integer.");
    //    }
    //
    //    public override string ToString()
    //    {
    //        if (IsInteger)
    //        {
    //            return "#" + Id;
    //        }
    //
    //        return Name;
    //    }
    //}

    #endregion
}